﻿using System.Collections.Generic;
using Cesave.Domain.Core;
using Cesave.Domain.PermisosModule.Entities;
using System.Collections;

namespace Cesave.Domain.PermisosModule.Contracts.Juntas
{
	/// <summary>
	/// 
	/// </summary>
	public interface IJuntaRepository
		: IRepositoryEx<Junta>
	{
		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByEstadoSpecification"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByEstadoSpecification(JuntasByEstadoSpecification juntasByEstadoSpecification);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByEstadoSpecification"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByEstadoAndStatusSpecification(JuntasByEstadoSpecification juntasByEstadoSpecification, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByMunicipioSpecification"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByMunicipioSpecification(JuntasByMunicipioSpecification juntasByMunicipioSpecification);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByMunicipioSpecification"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByMunicipioAndStatusSpecification(JuntasByMunicipioSpecification juntasByMunicipioSpecification, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByDistritoSpecification"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByDistritoSpecification(JuntasByDistritoSpecification juntasByDistritoSpecification);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntasByDistritoSpecification"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		IEnumerable<Junta> FindJuntasByDistritoAndStatusSpecification(JuntasByDistritoSpecification juntasByDistritoSpecification, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaByGuidSpecification"></param>
		/// <returns></returns>
		Junta FindJuntaByGuidSpecification(JuntaByGuidSpecification juntaByGuidSpecification);

	}
}
